struct buf {
  int valid;   // has data been read from disk?
  int disk;    // does disk "own" buf?
  uint dev;
  uint blockno;
  struct sleeplock lock;
  uint refcnt;
  // 修改1: 注释掉原有的链表节点，因为要使用哈希桶方式管理缓冲区
  // 原因: 为实现无锁缓冲区访问，将缓冲区组织成哈希桶形式
//  struct buf *prev; // LRU cache list
//  struct buf *next;
  struct buf *qnext; // disk queue
  uchar data[BSIZE];
  // 修改2: 增加时间戳字段，用于记录buffer的使用情况
  // 原因: 实现LRU替换算法，选择最久未使用的缓冲区进行替换
  uint timestamp;
};